package com.fic.dao;

import java.io.IOException;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import oracle.jdbc.driver.OracleTypes;

import org.apache.log4j.Logger;

import com.fic.dto.FichaDTO;
import com.fic.dto.MatrizFicDTO;
import com.fic.vo.MatrizFicVO;
import com.fic.vo.MatrizGralFicDTO;


import utiles.AppProperties;
import utiles.ConexionPool;


public class FicFichaDAO {
	private static Logger log = Logger.getLogger(FicFichaDAO.class);
	String pkgVar = (AppProperties.getProperty("aplicacion", "PACKAGE"));
	
	 
	public  List<FichaDTO> getFichaByIDPaciente(String idPac) throws SQLException, IOException{
		Connection conn = ConexionPool.getConnectionPool();	    
		List<FichaDTO> listMatriz = new ArrayList<FichaDTO>();
		try {
			String query = "{ call "+pkgVar+".PKG_FIC_FICHA_2.getFichaByIDPaciente(?,?) }"; 	       
			CallableStatement  stmt = conn.prepareCall(query);
			stmt.setString(1, idPac);			
			stmt.registerOutParameter(2, OracleTypes.CURSOR);
			stmt.execute();
			ResultSet rs = (ResultSet)stmt.getObject(2);
			while (rs.next()) {
				FichaDTO fichaDTO = new FichaDTO();				
				fichaDTO.setIdFicha(rs.getString(1));
				fichaDTO.setRetrasoSN(rs.getString(2));
				fichaDTO.setSocialSMSF(rs.getString(3));
				fichaDTO.setAnamnesis(rs.getString(4));
				fichaDTO.setCrisis(rs.getString(5));	
				fichaDTO.setFecPrimVisita(rs.getString(6));
				fichaDTO.setObservacion(rs.getString(7));
				listMatriz.add(fichaDTO);				
			}
			rs.close();
			stmt.close();
		} catch (SQLException ex) {  
			log.error("Error FichaDAO.getFichaByIDPaciente SQLException: " +ex.getMessage());
			System.out.println(ex.getMessage());
		} finally {
			conn.close();
			conn = null;
		}
		return listMatriz;		
	}
	
	public List<FichaDTO> setDatosFichaByIDPAC(String idPAC, String fechavisita, String existeFecha) throws SQLException, IOException{
		Connection conn = ConexionPool.getConnectionPool();	
		List<FichaDTO> listMatriz = new ArrayList<FichaDTO>();
		try {
			String query = "{ call "+pkgVar+".PKG_FIC_FICHA_2.setDatosFichaByIDPAC(?,?,?,?) }"; 	
			CallableStatement  stmt = conn.prepareCall(query);
			stmt.setString(1, idPAC);
			stmt.setString(2, fechavisita);
			stmt.setString(3, existeFecha);
			stmt.registerOutParameter(4, OracleTypes.INTEGER);					
			stmt.execute();
			FichaDTO fic = new FichaDTO();
			fic.setIdFicha(stmt.getString(4));
			listMatriz.add(fic);		
			stmt.close();
		} catch (SQLException ex) {  
			log.error("Error FichaDAO.setDatosFichaByIDPAC SQLException: " +ex.getMessage());
			log.error("Error FichaDAO.setDatosFichaByIDPAC Valores: idPAC:"+idPAC+"; fechavisita:"+fechavisita+"; existeFecha"+existeFecha);
			System.out.println(ex.getMessage());

		} finally {
			conn.close();
			conn = null;
		}
		return listMatriz;		
	}
	
	public  int setInsertMatrizByID(MatrizFicVO matrizFicVO) throws SQLException, IOException{
		Connection conn = ConexionPool.getConnectionPool();	
		int idTipoIngreso = 0;
		try {
			String query = "{ call "+pkgVar+".PKG_FIC_FICHA_2.setInsertMatrizByID(?,?,?,?,?,?) }"; 	       
			CallableStatement  stmt = conn.prepareCall(query);
			stmt.setString(1, matrizFicVO.getEstIUD());
			stmt.setString(2, matrizFicVO.getIdTAD());
			stmt.setString(3, matrizFicVO.getTextoMatriz());
			stmt.setString(4, matrizFicVO.getIdPAC());		
			stmt.setString(5, matrizFicVO.getTipoSeleccion());
			stmt.registerOutParameter(6, OracleTypes.INTEGER);
			stmt.execute();
			idTipoIngreso = (stmt.getInt(6));
			//System.out.println(stmt.getInt(6));
			stmt.close();
		} catch (SQLException ex) {  
			log.error("Error MatrizFichaDAO.setInsertMatrizByID SQLException: " +ex.getMessage());
			System.out.println(ex.getMessage());

		} finally {
			conn.close();
			conn = null;
		}
		return idTipoIngreso;		
	}
	
	public List<MatrizGralFicDTO> getMatrizGeneral() throws SQLException, IOException{
		Connection conn = ConexionPool.getConnectionPool();		    
		List<MatrizGralFicDTO> listMatriz = new ArrayList<MatrizGralFicDTO>();
		try {
			String query = "{ call "+pkgVar+".PKG_FIC_FICHA_2.getMatrizGeneral(?) }"; 	       
			CallableStatement  stmt = conn.prepareCall(query);
			stmt.registerOutParameter(1, OracleTypes.CURSOR);
			stmt.execute();
			ResultSet rs = (ResultSet)stmt.getObject(1);
			while (rs.next()) {
				MatrizGralFicDTO matrizGralDTO = new MatrizGralFicDTO();				
				matrizGralDTO.setIdTAE(rs.getString(1));
				matrizGralDTO.setDescrTAE(rs.getString(2));
				matrizGralDTO.setTipoSeleccionTAE(rs.getString(3));
				matrizGralDTO.setRequeridoTAESN(rs.getString(4));
				matrizGralDTO.setActivoTAESN(rs.getString(5));
				matrizGralDTO.setIdTAD(rs.getString(6));
				matrizGralDTO.setDescrTAD(rs.getString(7));
				matrizGralDTO.setActivoTADSN(rs.getString(8));				
				listMatriz.add(matrizGralDTO);				
			}
			rs.close();
			stmt.close();
		} catch (SQLException ex) {  
			log.error("Error MatrizFichaDAO.getMatrizGeneral SQLException: " +ex.getMessage());
			System.out.println(ex.getMessage());
		} finally {
			conn.close();
			conn = null;
		}
		return listMatriz;		
	}

	public List<MatrizFicDTO> getMatrizByIDPaciente(String idPac) throws SQLException, IOException{
		Connection conn = ConexionPool.getConnectionPool();    
		List<MatrizFicDTO> listMatriz = new ArrayList<MatrizFicDTO>();
		try {
			String query = "{ call "+pkgVar+".PKG_FIC_FICHA_2.getMatrizByIDPaciente(?,?) }"; 	       
			CallableStatement  stmt = conn.prepareCall(query);
			stmt.setString(1, idPac);			
			stmt.registerOutParameter(2, OracleTypes.CURSOR);
			stmt.execute();
			ResultSet rs = (ResultSet)stmt.getObject(2);
			while (rs.next()) {
				MatrizFicDTO matrizFicDTO = new MatrizFicDTO();				
				matrizFicDTO.setIdMatriz(rs.getString(1));
				matrizFicDTO.setTextoMatriz(rs.getString(2));
				matrizFicDTO.setIdTAD(rs.getString(3));
				matrizFicDTO.setDescripTAD(rs.getString(4));
				matrizFicDTO.setActivoSNTAD(rs.getString(5));
				matrizFicDTO.setIdTAE(rs.getString(6));
				matrizFicDTO.setDescripTAE(rs.getString(7));
				matrizFicDTO.setTipoSeleccion(rs.getString(8));
				matrizFicDTO.setReqSN(rs.getString(9));
				matrizFicDTO.setActivoSNTAE(rs.getString(10));
				listMatriz.add(matrizFicDTO);				
			}
			rs.close();
			stmt.close();
		} catch (SQLException ex) {  
			log.error("Error MatrizFichaDAO.getMatrizByIDPaciente SQLException: " +ex.getMessage());
			System.out.println(ex.getMessage());
		} finally {
			conn.close();
			conn = null;
		}
		return listMatriz;		
	}
		
	
}
	
